import router from '@/router'
import store from '@/store'
// 前置路由
router.beforeEach(async(to, from, next) => {
  if (store.getters.token) {
    // 如果有token,就是登陆了
    if (to.path === '/login') {
      // 登录了 还去登录页 就直接跳首页
      next('/')
    } else {
      // 否则跳去其他页面
      if (!store.state.user.userinfo.username) {
        // 如果没有获取过用户信息，则获取一次数据
        await store.dispatch('user/getUserInfo')
        const routes = await store.dispatch('permission/filterRouter', store.state.user.userinfo.roles.menus)
        // 可以通过router.addRoutes 方法来后续追加路由配置
        router.addRoutes([
          ...routes,
          // 解决一刷新就404问题，逻辑：只有获取了用户数据后，找不到页面才可以显示404，
          // 否则只要刷新页面，数据还没获取到 404就先出来了
          { path: '*', redirect: '/404', hidden: true }
        ])
        // 解决刷新就空白问题，由于一开始匹配静态路，静态里面已经没了这个页面，所以去了空白页面，等它进了路由守卫后，加载完了数据再重跳转一次to.path
        next(to.path)
      }
      // 获取数据了再次来就走这里
      next()
    }
  } else {
    // 没有登录
    const whiteList = ['/login', '/404']
    if (whiteList.indexOf(to.path) > -1) {
      // 如果去的页面 在白名单内，则放行
      next()
    } else {
      next('/login')
    }
  }
})

